package com.yunke.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * 用户消息实体类
 * 
 * @author yunke
 * @since 1.0.0
 */
@Data
@TableName("yunke_user_message")
@Schema(description = "用户消息")
public class YunkeUserMessage {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    @Schema(description = "主键ID")
    private Long id;

    /**
     * 消息ID（唯一标识）
     */
    @Schema(description = "消息ID")
    private String messageId;

    /**
     * 聊天室ID
     */
    @Schema(description = "聊天室ID")
    private String chatId;

    /**
     * 发送者用户ID
     */
    @Schema(description = "发送者用户ID")
    private Long senderId;

    /**
     * 接收者用户ID
     */
    @Schema(description = "接收者用户ID")
    private Long receiverId;

    /**
     * 消息类型：1-文字 2-图片 3-语音 4-位置 5-系统消息 6-撤回消息
     */
    @Schema(description = "消息类型")
    private Integer messageType;

    /**
     * 消息内容
     */
    @Schema(description = "消息内容")
    private String content;

    /**
     * 媒体文件URL（图片、语音等）
     */
    @Schema(description = "媒体文件URL")
    private String mediaUrl;

    /**
     * 媒体文件大小（字节）
     */
    @Schema(description = "媒体文件大小")
    private Long mediaSize;

    /**
     * 语音时长（秒，仅语音消息）
     */
    @Schema(description = "语音时长（秒）")
    private Integer voiceDuration;

    /**
     * 位置经度（仅位置消息）
     */
    @Schema(description = "位置经度")
    private Double longitude;

    /**
     * 位置纬度（仅位置消息）
     */
    @Schema(description = "位置纬度")
    private Double latitude;

    /**
     * 位置地址（仅位置消息）
     */
    @Schema(description = "位置地址")
    private String locationAddress;

    /**
     * 消息状态：1-发送中 2-已发送 3-已送达 4-已读 5-发送失败 6-已撤回
     */
    @Schema(description = "消息状态")
    private Integer status;

    /**
     * 是否已读：0-未读 1-已读
     */
    @Schema(description = "是否已读")
    private Integer isRead;

    /**
     * 已读时间
     */
    @Schema(description = "已读时间")
    private Long readTime;

    /**
     * 是否撤回：0-否 1-是
     */
    @Schema(description = "是否撤回")
    private Integer isRecall;

    /**
     * 撤回时间
     */
    @Schema(description = "撤回时间")
    private Long recallTime;

    /**
     * 撤回原因
     */
    @Schema(description = "撤回原因")
    private String recallReason;

    /**
     * 回复的消息ID
     */
    @Schema(description = "回复的消息ID")
    private String replyMessageId;

    /**
     * 回复的消息内容（冗余字段，便于显示）
     */
    @Schema(description = "回复的消息内容")
    private String replyContent;

    /**
     * 扩展数据（JSON格式）
     */
    @Schema(description = "扩展数据")
    private String extraData;

    /**
     * 发送时间
     */
    @Schema(description = "发送时间")
    private Long sendTime;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    private Long createTime;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    private Long updateTime;
} 